home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / TRW2000 for Win9x v1.22 / PLUGSDK / LOG2 / LOG2.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-26  |  1.8 KB  |  109 lines

  1. #include "BASEFUNC.H"
  2.  
  3. /*
  4.     log2 c:\trw.log        #begin log
  5.     g if (eip>401000)    #run a soft breakpoint, TRW2000 will log all instructions
  6.     log2 off            #end log, and close file
  7. */
  8.  
  9. void    Log_DoIt2();
  10. void    log2_write();
  11. BOOL    hook_log2();
  12. BOOL    cmd_LOG2    ( int argc, PSTR* argv );
  13.  
  14. BOOL    fLog2 = FALSE;
  15.  
  16. class CLog2
  17. {
  18. public:
  19.     CLog2();
  20.     ~CLog2();
  21. };
  22. CLog2 cinit;    //must have a instance data
  23.  
  24. CLog2::~CLog2()
  25. {
  26.     unhook( &hh_IntObj_01,hook_log2 );    //unhook twice is no problem
  27. }    
  28.  
  29. CLog2::CLog2()
  30. {
  31.     Add_Command ( "LOG2", "filename | off",
  32.         "Log instruction to file",
  33.         0,
  34.         cmd_LOG2 );
  35.  
  36.     msgl ( "LOG2 Plugs Initialized..." ) ;
  37. }
  38. // ---------------------------------------
  39. void    Log2_Begin()
  40. {
  41.     if( fLog2 != 0 )
  42.         return;
  43.     fLog2 = TRUE;
  44.     hook( &hh_IntObj_01,hook_log2, 255 );
  45. }
  46.  
  47. void    Log2_End()
  48. {
  49.     if( fLog2 == 0 )
  50.         return;
  51.     if( fLog2==2 )
  52.         log2_write();
  53.     unhook( &hh_IntObj_01,hook_log2 );
  54.     fLog2 = 0;
  55. }
  56. BOOL    hook_log2()
  57. {
  58.     if( fLog2 == FALSE )
  59.         return FALSE;
  60.     Log_DoIt2();
  61.     return FALSE;    //must return FALSE
  62. }
  63.  
  64. // ----------------------------------
  65. char log2_fname[80];
  66. DWORD    log2_buf[0x400];
  67. DWORD    log2_top;
  68.  
  69. void Log_DoIt2()
  70. {
  71.     log2_buf[log2_top++] = User_EIP;
  72.     if( log2_top==0x400 )
  73.     {
  74.         log2_write();
  75.         log2_top = 0;        
  76.     }
  77. }
  78.  
  79. void    log2_write()
  80. {
  81.     Begin_Nest_VMM_Exec();
  82.     HANDLE h = fopen_append( log2_fname );
  83.     fwrite(h,log2_buf,log2_top*4);
  84.     fclose(h);
  85.     End_Nest_VMM_Exec();
  86. }
  87. BOOL cmd_LOG2    ( int argc, PSTR* argv )
  88. {
  89.     if( argc==0 )
  90.     {
  91.         if( fLog2== 0 )
  92.             msgl( "log2 is off" );
  93.         else
  94.             prtl( "log2 is logging to %s",log2_fname );
  95.         return TRUE;
  96.     }
  97.     if( arg1[0]=='O' && arg1[1]=='F' && arg1[2]=='F' )
  98.     {
  99.         Log2_End();
  100.         return TRUE;
  101.     }
  102.     strcpy(    log2_fname, arg1 );
  103.     log2_top = 0;
  104.     Log2_Begin();
  105.     
  106.     return TRUE;
  107. }
  108.  
  109.